using System;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Security.Principal;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
using System.Web.Security;
using Lead2012.Models;
using Lead2012.Business;
using Lead2012.ViewModels;
using Lead2012.Repository;
using Lead2012.Utility;

namespace Lead2012.Controllers
{
	public class AccountController : Controller
    {
        EFRoleProvider provider = new EFRoleProvider();
        public IFormsAuthenticationService FormsService { get; set; }
        public IMembershipService MembershipService { get; set; }

        protected override void Initialize(RequestContext requestContext)
        {
            if (FormsService == null) { FormsService = new FormsAuthenticationService(); }
            if (MembershipService == null) { MembershipService = new AccountMembershipService(); }

            base.Initialize(requestContext);
        }

		// GET: /Account/Login
		public ActionResult Login(string returnUrl)
		{
            if (Request.QueryString["expired"] != null)
                ViewData["expired"] = "Đối với bảo mật của bạn, do không hoạt động, chúng tôi đã kết thúc phiên làm việc của bạn.Hãy đăng nhập lại.";
			ViewBag.ReturnUrl = returnUrl;

			return View();
		}

		//
		// POST: /Account/Login
		[HttpPost]
		public ActionResult Login(LogOnModel model, string returnUrl)
		{
			if (ModelState.IsValid)
			{
				try
				{
                    model.Password = EncryptionData.Encryption(model.Password);
                    model.RememberMe = true;

                    UserRepository repository = new UserRepository();
                    User user = repository.GetSingle(model.UserName);

                    if (MembershipService.ValidateUser(model.UserName, model.Password))
                    {
                        if (user.IsLockedOut == false)
                        {
                            // Update login counts
                            user.NumLogin = user.NumLogin == null ? 1 : user.NumLogin + 1;
                            repository.Save(user);

                            FormsService.SignIn(model.UserName, model.RememberMe);

                            if (Url.IsLocalUrl(returnUrl))
                                return Redirect(returnUrl);
                            else
                                return Redirect("/Dashboard");
                        }
                    }
                    else
                    {
                        ViewBag.ErrorMessage = "Tên đăng nhập hoặc mật khẩu cung cấp không chính xác.";
                    }
				}
				catch (Exception ex)
				{
                    //ViewBag.ErrorMessage = "Tên đăng nhập hoặc mật khẩu cung cấp không chính xác.";
                    //ModelState.AddModelError("", ex.Message);
                    throw;
				}
			}

			// If we got this far, something failed, redisplay form
			return View();
		}

		//
		// GET: /Account/LogOff
		public ActionResult LogOff()
		{
			FormsAuthentication.SignOut();

			return RedirectToAction("Login", "Account");
		}
	}
}
